/**
 * URL处理工具函数
 * 用于处理图片、视频等资源的完整URL拼接
 */

import { config } from './api.js'

/**
 * 获取完整的URL地址
 * @param {string} path - 相对路径或绝对路径
 * @param {string} customBaseURL - 可选的自定义baseURL，默认使用配置文件中的baseURL
 * @returns {string} 完整的URL地址
 */
export function getFullUrl(path, customBaseURL = null) {
  if (!path) return '';
  
  // 如果已经是http/https开头，直接返回
  if (/^https?:\/\//.test(path)) return path;
  
  // 如果是base64或data:，直接返回
  if (/^data:/.test(path)) return path;
  
  // 使用自定义baseURL或配置文件中的baseURL
  const baseURL = customBaseURL || config.baseURL;
  
  // 如果是绝对路径（/开头），拼接baseURL
  if (path.startsWith('/')) {
    return baseURL + path;
  }
  
  // 其他情况也拼接baseURL
  return baseURL + '/' + path;
}

/**
 * 批量处理对象中的图片URL
 * @param {Object|Array} data - 要处理的数据对象或数组
 * @param {Array} imageFields - 图片字段名数组，如 ['img', 'imageUrl', 'avatar']
 * @param {string} customBaseURL - 可选的自定义baseURL
 * @returns {Object|Array} 处理后的数据
 */
export function processImageUrls(data, imageFields = ['img', 'imageUrl', 'avatar','thumbnailUrl','typeImage'], customBaseURL = null) {
  if (!data) return data;
  
  // 处理数组
  if (Array.isArray(data)) {
    return data.map(item => processImageUrls(item, imageFields, customBaseURL));
  }
  
  // 处理对象
  if (typeof data === 'object') {
    const processed = { ...data };
    
    imageFields.forEach(field => {
      if (processed[field]) {
        processed[field] = getFullUrl(processed[field], customBaseURL);
      }
    });
    
    return processed;
  }
  
  return data;
}

/**
 * 处理banner数据的图片URL
 * @param {Array} banners - banner数据数组
 * @param {string} customBaseURL - 可选的自定义baseURL
 * @returns {Array} 处理后的banner数据
 */
export function processBannerUrls(banners, customBaseURL = null) {
  if (!Array.isArray(banners)) return banners;
  
  return banners.map(banner => ({
    ...banner,
    thumbnailUrl: getFullUrl(banner.thumbnailUrl || banner.img || banner.url, customBaseURL),
    thumbnailUrl: banner.thumbnailUrl ? getFullUrl(banner.thumbnailUrl, customBaseURL) : undefined
  }));
}

/**
 * 处理仓库数据的图片URL
 * @param {Array} warehouses - 仓库数据数组
 * @param {string} customBaseURL - 可选的自定义baseURL
 * @returns {Array} 处理后的仓库数据
 */
export function processWarehouseUrls(warehouses, customBaseURL = null) {
  if (!Array.isArray(warehouses)) return warehouses;
  
  return warehouses.map(warehouse => ({
    ...warehouse,
    thumbnailUrl: warehouse.thumbnailUrl ? getFullUrl(warehouse.thumbnailUrl, customBaseURL) : undefined
  }));
}

/**
 * 处理新闻数据的图片URL
 * @param {Array} news - 新闻数据数组
 * @param {string} customBaseURL - 可选的自定义baseURL
 * @returns {Array} 处理后的新闻数据
 */
export function processNewsUrls(news, customBaseURL = null) {
  if (!Array.isArray(news)) return news;
  
  return news.map(item => ({
    ...item,
    thumbnailUrl: getFullUrl(item.thumbnailUrl || item.imageUrl, customBaseURL)
  }));
}

/**
 * 检查URL是否有效
 * @param {string} url - 要检查的URL
 * @returns {boolean} 是否有效
 */
export function isValidUrl(url) {
  if (!url) return false;
  
  // 检查是否是完整的http/https URL
  if (/^https?:\/\//.test(url)) {
    try {
      new URL(url);
      return true;
    } catch {
      return false;
    }
  }
  
  // 检查是否是base64或data URL
  if (/^data:/.test(url)) return true;
  
  // 检查是否是相对路径
  return url.startsWith('/') || !url.includes('://');
}

/**
 * 获取URL的文件扩展名
 * @param {string} url - URL地址
 * @returns {string} 文件扩展名（不包含点）
 */
export function getUrlExtension(url) {
  if (!url) return '';
  
  try {
    const urlObj = new URL(url);
    const pathname = urlObj.pathname;
    const lastDotIndex = pathname.lastIndexOf('.');
    
    if (lastDotIndex > -1) {
      return pathname.substring(lastDotIndex + 1).toLowerCase();
    }
  } catch {
    // 如果不是有效URL，尝试从字符串中提取
    const lastDotIndex = url.lastIndexOf('.');
    if (lastDotIndex > -1) {
      return url.substring(lastDotIndex + 1).toLowerCase();
    }
  }
  
  return '';
}

/**
 * 判断URL是否为图片
 * @param {string} url - URL地址
 * @returns {boolean} 是否为图片
 */
export function isImageUrl(url) {
  const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp'];
  const extension = getUrlExtension(url);
  return imageExtensions.includes(extension);
}

/**
 * 判断URL是否为视频
 * @param {string} url - URL地址
 * @returns {boolean} 是否为视频
 */
export function isVideoUrl(url) {
  const videoExtensions = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm', 'mkv'];
  const extension = getUrlExtension(url);
  return videoExtensions.includes(extension);
}

// 导出默认函数，方便直接导入使用
export default getFullUrl; 